#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>


  int count = 0;

void handler(int signo)
{
  while(1){
    sleep(1);
   printf("the signal is NO.%d, catches successful\n", signo);
  }
  //exit(0);
}

void usage(const char* str)
{
  printf("Usage:\n\t%s\t signo \twho\n", str);
}

void sigcb(int signo)
{
  printf("signal is %d, count is %d\n", signo, count);
  exit(1);
}




void pending_show(sigset_t* set)
{
  for(int i = 1; i <= 31; ++i)
  {
    if(sigismember(set, i))
    {
      printf("1");
    }
    else 
    {
      printf("0");
    }
  }
  printf("\n");
}


int main()
{
  struct sigaction act;
  act.sa_handler = handler;

  sigset_t set;
  sigemptyset(&set);

  // 执行自定义函数时，额外屏蔽的信号
  sigaddset(&set, 3);
  act.sa_mask = set;

  sigaction(2, &act, NULL);

  while(1)
  {
    printf("running\n");
    sleep(1);
  }
  
//  sigset_t set, oset;
//
//  sigemptyset(&set);
//  sigemptyset(&oset);
//
//  sigaddset(&set, 2);
//
//  sigprocmask(SIG_SETMASK, &set, &oset);
//
//  sigset_t pending;
//  sigemptyset(&pending);
//  
//  int cnt = 0;
//
//  while(1)
//  {
//    sigemptyset(&pending);
//
//    sigpending(&pending);
//
//    pending_show(&pending);
//    
//    sleep(1);
//    cnt++;
//    if(cnt == 10)
//    {
//      sigprocmask(SIG_SETMASK, &oset, NULL);
//    }
//  }
//
// // signal(SIGALRM, sigcb);
//  int count = 0;
 // alarm(1);

 // while(1)
 // {
 //   //printf("%d\n", count);
 //   count++;
 // }







   // int sig = 1;
   // for(; sig <= 31; sig++){
   //     signal(sig, handler);
   // }

   // int ret = alarm(10);
   // ret = alarm(5);

   // while(1){
   //     printf("I am a process: ret: %d\n\n", ret);
   //     sleep(1);

   //     int res = alarm(0); //取消闹钟
   //     printf("res: %d\n", res);
   //     //abort();
   //     //raise(8);
   // }

  //int cnt = 5;
  //while(cnt--)
  //{
  //  printf("%d\n", cnt);
  //  sleep(1);
  //}

  //abort();
  //raise(9);
  
  //if(argc != 3)
  //{
  //  usage(argv[0]);
  //  return 0;
  //}

  //printf("the signal is %s\n", argv[1]);
  //printf("who is %s", argv[2]);

  //int signo = atoi(argv[1]);
  //int who = atoi(argv[2]);

  //kill(who, signo);
























 // if(fork() == 0)
 // {
 //   printf("i'm child\n");
 //   int a = 1;
 //   a /= 0;
 //   exit(1);
 // }

 //int ret = 0;
 //waitpid(-1, &ret, 0);
 //
 //printf("the signo is %d", ret & 0x7f);
//// printf("exit code: %d", (ret>>8) & 0xff);

//  for(int i = 1; i <= 31; ++i)
//  {
//    signal(i, handler);
//  }
//
//  while(1)
//  {
//    printf("maining\n");
//    sleep(1);
//  }

//  signal(2, handler);
//  while(1)
//  {
//    printf("maining\n");
//    sleep(1);
//  }
  return 0;
}
